Micron Document
🎖️GitЯра🎖️

Node / meshcore / MeshCore / files / src / helpers / StaticPoolPacketManager.cpp

Displaying Raw • Download

src/helpers/StaticPoolPacketManager.cpp 890a2e2cffa98dea3ca88db3c3aba72ef23ff3f7 (890a2e2c) Text, 3.58 KB

Tff7b72#Tff7b72include T8b949e"StaticPoolPacketManager.h"

Te6edf3PacketQueueTff7b72:Tff7b72:Te6edf3PacketQueueTb4b4b4(Tffa657int Te6edf3max_entriesTb4b4b4) Tb4b4b4{
Te6edf3_table Tff7b72= Tff7b72new Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72*Tb4b4b4[Te6edf3max_entriesTb4b4b4]Tb4b4b4;
Te6edf3_pri_table Tff7b72= Tff7b72new Tffa657uint8_tTb4b4b4[Te6edf3max_entriesTb4b4b4]Tb4b4b4;
Te6edf3_schedule_table Tff7b72= Tff7b72new Tffa657uint32_tTb4b4b4[Te6edf3max_entriesTb4b4b4]Tb4b4b4;
Te6edf3_size Tff7b72= Te6edf3max_entriesTb4b4b4;
Te6edf3_num Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}

Tffa657int Te6edf3PacketQueueTff7b72:Tff7b72:Te6edf3countBeforeTb4b4b4(Tffa657uint32_t Te6edf3nowTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3now Tff7b72=Tff7b72= T79c0ff0xFFFFFFFFTb4b4b4) Tff7b72return Te6edf3_numTb4b4b4; T8b949e// sentinel: count all entries regardless of schedule

Tffa657int Te6edf3n Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3j Tff7b72= T79c0ff0Tb4b4b4; Te6edf3j Tff7b72< Te6edf3_numTb4b4b4; Te6edf3jTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tb4b4b4(Tffa657int32_tTb4b4b4)Tb4b4b4(Te6edf3_schedule_tableTb4b4b4[Te6edf3jTb4b4b4] Tff7b72- Te6edf3nowTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4) Tff7b72continueTb4b4b4; T8b949e// scheduled for future... ignore for now
Te6edf3nTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3nTb4b4b4;
Tb4b4b4}

Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3PacketQueueTff7b72:Tff7b72:Te6edf3getTb4b4b4(Tffa657uint32_t Te6edf3nowTb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3min_pri Tff7b72= T79c0ff0xFFTb4b4b4;
Tffa657int Te6edf3best_idx Tff7b72= T79c0ff-1Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3j Tff7b72= T79c0ff0Tb4b4b4; Te6edf3j Tff7b72< Te6edf3_numTb4b4b4; Te6edf3jTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tb4b4b4(Tffa657int32_tTb4b4b4)Tb4b4b4(Te6edf3_schedule_tableTb4b4b4[Te6edf3jTb4b4b4] Tff7b72- Te6edf3nowTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4) Tff7b72continueTb4b4b4; T8b949e// scheduled for future... ignore for now
Tff7b72if Tb4b4b4(Te6edf3_pri_tableTb4b4b4[Te6edf3jTb4b4b4] Tff7b72< Te6edf3min_priTb4b4b4) Tb4b4b4{ T8b949e// select most important priority amongst non-future entries
Te6edf3min_pri Tff7b72= Te6edf3_pri_tableTb4b4b4[Te6edf3jTb4b4b4]Tb4b4b4;
Te6edf3best_idx Tff7b72= Te6edf3jTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3best_idx Tff7b72< T79c0ff0Tb4b4b4) Tff7b72return Tffa657NULLTb4b4b4; T8b949e// empty, or all items are still in the future

Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3top Tff7b72= Te6edf3_tableTb4b4b4[Te6edf3best_idxTb4b4b4]Tb4b4b4;
Tffa657int Te6edf3i Tff7b72= Te6edf3best_idxTb4b4b4;
Te6edf3_numTff7b72-Tff7b72-Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3i Tff7b72< Te6edf3_numTb4b4b4) Tb4b4b4{
Te6edf3_tableTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3_tableTb4b4b4[Te6edf3iTff7b72+T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3_pri_tableTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3_pri_tableTb4b4b4[Te6edf3iTff7b72+T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3_schedule_tableTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3_schedule_tableTb4b4b4[Te6edf3iTff7b72+T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3iTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3topTb4b4b4;
Tb4b4b4}

Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3PacketQueueTff7b72:Tff7b72:Te6edf3removeByIdxTb4b4b4(Tffa657int Te6edf3iTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3i Tff7b72>Tff7b72= Te6edf3_numTb4b4b4) Tff7b72return Tffa657NULLTb4b4b4; T8b949e// invalid index

Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3item Tff7b72= Te6edf3_tableTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Te6edf3_numTff7b72-Tff7b72-Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3i Tff7b72< Te6edf3_numTb4b4b4) Tb4b4b4{
Te6edf3_tableTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3_tableTb4b4b4[Te6edf3iTff7b72+T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3_pri_tableTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3_pri_tableTb4b4b4[Te6edf3iTff7b72+T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3_schedule_tableTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3_schedule_tableTb4b4b4[Te6edf3iTff7b72+T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3iTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3itemTb4b4b4;
Tb4b4b4}

Tffa657bool Te6edf3PacketQueueTff7b72:Tff7b72:Te6edf3addTb4b4b4(Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3packetTb4b4b4, Tffa657uint8_t Te6edf3priorityTb4b4b4, Tffa657uint32_t Te6edf3scheduled_forTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_num Tff7b72=Tff7b72= Te6edf3_sizeTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Te6edf3_tableTb4b4b4[Te6edf3_numTb4b4b4] Tff7b72= Te6edf3packetTb4b4b4;
Te6edf3_pri_tableTb4b4b4[Te6edf3_numTb4b4b4] Tff7b72= Te6edf3priorityTb4b4b4;
Te6edf3_schedule_tableTb4b4b4[Te6edf3_numTb4b4b4] Tff7b72= Te6edf3scheduled_forTb4b4b4;
Te6edf3_numTff7b72+Tff7b72+Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}

Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3StaticPoolPacketManagerTb4b4b4(Tffa657int Te6edf3pool_sizeTb4b4b4)Tff7b72: Te6edf3unusedTb4b4b4(Te6edf3pool_sizeTb4b4b4)Tb4b4b4, Te6edf3send_queueTb4b4b4(Te6edf3pool_sizeTb4b4b4)Tb4b4b4, Te6edf3rx_queueTb4b4b4(Te6edf3pool_sizeTb4b4b4) Tb4b4b4{
T8b949e// load up our unusued Packet pool
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3pool_sizeTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3unusedTb4b4b4.Te6edf3addTb4b4b4(Tff7b72new Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3allocNewTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3unusedTb4b4b4.Te6edf3removeByIdxTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4; T8b949e// just get first one (returns NULL if empty)
Tb4b4b4}

Tffa657void Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3freeTb4b4b4(Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3packetTb4b4b4) Tb4b4b4{
Te6edf3unusedTb4b4b4.Te6edf3addTb4b4b4(Te6edf3packetTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3queueOutboundTb4b4b4(Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3packetTb4b4b4, Tffa657uint8_t Te6edf3priorityTb4b4b4, Tffa657uint32_t Te6edf3scheduled_forTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3send_queueTb4b4b4.Te6edf3addTb4b4b4(Te6edf3packetTb4b4b4, Te6edf3priorityTb4b4b4, Te6edf3scheduled_forTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3MESH_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffqueueOutbound: send queue full, dropping packetTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3freeTb4b4b4(Te6edf3packetTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3getNextOutboundTb4b4b4(Tffa657uint32_t Te6edf3nowTb4b4b4) Tb4b4b4{
T8b949e//send_queue.sort(); // sort by scheduled_for/priority first
Tff7b72return Te6edf3send_queueTb4b4b4.Te6edf3getTb4b4b4(Te6edf3nowTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657int Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3getOutboundCountTb4b4b4(Tffa657uint32_t Te6edf3nowTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3send_queueTb4b4b4.Te6edf3countBeforeTb4b4b4(Te6edf3nowTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657int Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3getOutboundTotalTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3send_queueTb4b4b4.Te6edf3countTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657int Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3getFreeCountTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3unusedTb4b4b4.Te6edf3countTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3getOutboundByIdxTb4b4b4(Tffa657int Te6edf3iTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3send_queueTb4b4b4.Te6edf3itemAtTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3removeOutboundByIdxTb4b4b4(Tffa657int Te6edf3iTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3send_queueTb4b4b4.Te6edf3removeByIdxTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3queueInboundTb4b4b4(Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3packetTb4b4b4, Tffa657uint32_t Te6edf3scheduled_forTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3rx_queueTb4b4b4.Te6edf3addTb4b4b4(Te6edf3packetTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3scheduled_forTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3MESH_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffqueueInbound: rx queue full, dropping packetTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3freeTb4b4b4(Te6edf3packetTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketTff7b72* Te6edf3StaticPoolPacketManagerTff7b72:Tff7b72:Te6edf3getNextInboundTb4b4b4(Tffa657uint32_t Te6edf3nowTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3rx_queueTb4b4b4.Te6edf3getTb4b4b4(Te6edf3nowTb4b4b4)Tb4b4b4;
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.07s